package la.iok.hzsvn.lewin.movie.cloud.config;

import la.iok.hzsvn.redis.config.RedisKeyProperties;
import la.iok.hzsvn.share.annotations.NotNull;
import org.springframework.stereotype.Service;

@Service
public class RedisKey {
    private final String keyPrefix;
    public RedisKey(RedisKeyProperties keyProperties){
        //us代表user-service
        keyPrefix = keyProperties.getKeyPrefix() + ":us:";
    }
    @NotNull
    public String phoneCodeKey(@NotNull String phoneNumber){
        return keyPrefix + "phone:code:" + phoneNumber;
    }

    /**
     * 设备请求验证码所使用的手机号码的key,限制同一个设备请求验证码。同一个设备，在一定时间内，不能连续使用不同的手机号码请求验证码
     * @param deviceCode 设备码
     * @return the key
     */
    public String devicePhoneCodeKey(@NotNull String deviceCode){
        return keyPrefix + "device:code:" + deviceCode;
    }

    /**
     * 用户请求验证码时,限制在一定时间内，同一个用户不能连续使用不同的手机号码请求验证码
     * @param userId 用户id
     * @return 用户请求验证码所使用的手机号码的key.保存用户请求的手机号码
     */
    public String userPhoneCodeKey(@NotNull Long userId){
        return keyPrefix + "usr:id:" + userId;
    }
    /**
     * 微信绑定用户时记录用户的微信身份
     * @param sessionId 绑定会话id
     * @return the key
     */
    public String wxBindingSessionKey(@NotNull String sessionId){
        return keyPrefix + "wx:bd:" + sessionId;
    }

    /**
     * 微信用户在微信平台中的身份信息。用户通过微信绑定平台账号登录成功时保存对应的值,值的内容为{@link la.iok.hzsvn.lewin.movie.cloud.model.Code2SessionRes}
     * @param bindingId 微信账号与系统用户的绑定关系id
     * @return the key
     */
    public String wxUserSessionInfoKey(@NotNull Long bindingId){
        return keyPrefix + "wx:ses:" + bindingId;
    }
    /**
     * 微信登录的时候,用户的手机号与用户绑定关系。key中包含手机号,值里面存储的是{@link la.iok.hzsvn.lewin.movie.cloud.entity.WxUserBinding WxUserBinding}的id。
     * 在生成token的时候,根据手机号查询此处绑定的id并写入token
     */
    public String phoneUserBindingKey(@NotNull String phoneNumber){
        return keyPrefix + "ph:u:bd:" + phoneNumber;
    }
    /**
     * 二维码的标识对应店铺的id的key
     * @param uuid 二维码标识
     * @return the key
     */
    @NotNull
    public String qrKey(@NotNull String uuid){
        return keyPrefix + "qr:" + uuid;
    }
    public String shopGeoKey(){
        return keyPrefix + "geo";
    }
}
